/**
 * 
 */
package fr.gfi.agraf.vue.action.administrer.utilisateur;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

import fr.gfi.agraf.exception.AgrafException;
import fr.gfi.agraf.utils.PropertiesUtils;
import fr.gfi.agraf.utils.VerificationUtils;
import fr.gfi.agraf.vue.bean.UtilisateurDTO;

/**
 * @author Zakaria
 *
 */
public class AjouterUtilisateurAction extends AbstractTraitementUtilisateurAction {

	private static final String ERREUR_SAISIE_EMAIL_INVALIDE = "erreur.saisie.email.invalide";

	private static final String ERREUR_SAISIE_PASSWORD_TAILLE = "erreur.saisie.password.taille";

	private static final String ERREUR_SAISIE_PASSWORD_CONFIRME = "erreur.saisie.password.confirme";

	private static final String ERREUR_SAISIE_PASSWORD = "erreur.saisie.password";

	private static final String ERREUR_SAISIE_LOGIN = "erreur.saisie.login";

	private static final String ERREUR_SAISIE_PRENOM = "erreur.saisie.prenom";

	private static final String ERREUR_SAISIE_NOM = "erreur.saisie.nom";

	/**
	 * Logger
	 */
	private final static Logger LOGGER = Logger.getLogger(AjouterUtilisateurAction.class);

	/**
	 * 
	 */
	private static final long serialVersionUID = -4982400051036401833L;

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * fr.gfi.agraf.vue.action.AbstractApplicationSupportAction#executeAction()
	 */
	@Override
	public String executeAction() throws Exception {
		if(!validateBis()){
			return ERROR;
		}
		// créé utilisateurDTO
		final UtilisateurDTO utilisateurDTO = creerUtilisateurDTO();
		try {
			// appel au service
			utilisateurService.ajouterUtilisateur(utilisateurDTO);
		} catch (final AgrafException ae) {
			// Recupére le message d'erreur
			final String messageErreur = PropertiesUtils.getProperty(ae.getKey());
			// Ajoute action error
			addActionError(messageErreur);
			LOGGER.error(messageErreur, ae);
			return ERROR;
		}
		return SUCCESS;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.opensymphony.xwork2.ActionSupport#validate()
	 */
	@Override
	public void validate() {
		

		super.validate();
	}
	
	private boolean validateBis(){
		if (StringUtils.isBlank(nom)) {
			addActionError(PropertiesUtils.getProperty(ERREUR_SAISIE_NOM));
			return false;
		}
		if (StringUtils.isBlank(prenom)) {
			addActionError(PropertiesUtils.getProperty(ERREUR_SAISIE_PRENOM));
			return false;
		}
		if (StringUtils.isBlank(login)) {
			addActionError(PropertiesUtils.getProperty(ERREUR_SAISIE_LOGIN));
			return false;
		}
		if (StringUtils.isBlank(newPassword)) {
			addActionError(PropertiesUtils.getProperty(ERREUR_SAISIE_PASSWORD));
			return false;
		}
		if (StringUtils.isBlank(newPassword2)) {
			addActionError(PropertiesUtils.getProperty(ERREUR_SAISIE_PASSWORD));
			return false;
		}
		if (!StringUtils.equals(newPassword, newPassword2)) {
			addActionError(PropertiesUtils.getProperty(ERREUR_SAISIE_PASSWORD_CONFIRME));
			return false;
		}
		if (newPassword.length() < 6) {
			addActionError(PropertiesUtils.getProperty(ERREUR_SAISIE_PASSWORD_TAILLE));
			return false;
		}
		if (!VerificationUtils.isEmailValide(email)) {
			addActionError(PropertiesUtils.getProperty(ERREUR_SAISIE_EMAIL_INVALIDE));
			return false;
		}
		return true;
	}
}
